// queue.h -- interface for a queue
#ifndef QUEUE_H_
#define QUEUE_H_
// This queue will contain Customer items
class Customer
{
    private:
        long arrive;    // arrival time for customer
        int processtime;// processing time for customer
    public:
        Customer() { arrive = processtime = 0; }
        void set(long when);
        long when() const { return arrive; }
        int ptime() const { return processtime; }
};

typedef Customer Item;

class Queue
{
    private:
    // class scope definition
        // Node is a nested structure definition local to this class
        struct Node { Item item; struct Node * next;};
        enum {Q_SIZE = 10};
    // private class members
        Node * front;       // pointer to front of Queue
        Node * rear;        // pointor to rear of Queue
        int items;          // current number of items in Queue
        const int qsize;    // maximum number of items in Queue
        // preemptive definition to prevent public copying
        Queue(const Queue & q) : qsize(0) { }
        Queue & operator=(const Queue & q) { return *this;}
    public:
        Queue(int qs = Q_SIZE); // create queue with a qs limit
        ~Queue();
        bool isempty() const;
        bool isfull() const;
        int queuecount() const;
        bool enqueue(const Item &item); // add item to end
        bool dequeue(Item &item);       // remove item from front
};
#endif
